<?php
    //数据库操作类
	class MySqlPDO{
		private $config = array(
			'driver'=>'mysql',
			'host'=>'127.0.0.1',
			'port'=>'3306',
			'username'=>'root',
			'pwd'=>'123456',
			'charset'=>'utf8',
			'dbname'=>'news',
		);	
		private $pdo;
		private static $instance;
		private function __construct($param){
		    // __construct() 函数创建一个新的 SimpleXMLElement 对象
            // __construct(data,options,is_url,ns,is_prefix)
            // data	必需。形式良好的 XML 字符串或 XML 文档的路径或 URL
			$this -> config = array_merge($this->config,$param);
            // array_merge  合并一个或多个数组
			$this -> connect();
		}
		private function __clone(){
			//私有克隆方法
		}
		public static function getInstance($param = array()){
			if(!self::$instance instanceof self){
			    // instanceof 1.用于确定一个 PHP 变量是否属于某一类 class 的实例：
                // instanceof 2.也可用来确定一个变量是不是继承自某一父类的子类的实例：
                // 3.使用 instanceof 检查对象不是某个类的实例
                // 4.最后，instanceof也可用于确定一个变量是不是实现了某个接口的对象的实例:
				self::$instance = new self($param);
			}
			return self::$instance;
		}
		private function connect(){
			$dsn = "{$this->config['driver']}: host={$this->config['host']}; port={$this->config['port']}; dbname={$this->config['dbname']}; charset={$this->config['charset']}";
			try{
				$this -> pdo = new PDO($dsn, $this -> config['username'],$this -> config['pwd']);
			}catch(PDOException $e){
				die("数据库连接失败！".$e -> getMessage());
			}	
		}

		//执行SQL语句
		public function query($sql){
			$rs = $this -> pdo -> query($sql);
			if($rs === false){
				$error = $this -> pdo -> errorInfo();
				die("操作失败:ERROR {$error[1]}({$error[0]}): {$error[2]}");	
			}	
			return $rs;
		}
		//获取所有数据的方法
		public function fetchAll($sql){
			return $this -> query($sql) -> fetchAll();
		}
		//获取一行数据的方法
		public function fetchRow($sql){
			return $this -> query($sql) -> fetch();
		}
	}